perm filename SPRNG1.SAI[VIS,HPM]1 blob
sn#122349 filedate 1974-10-01 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "SPRING"
C00005 00003 MAIN PROGRAM
C00007 ENDMK
C⊗;
BEGIN "SPRING"
REQUIRE "WINNIC.SAI[VIS,HPM]" SOURCE_FILE;
INTEGER WINDOW,WHIPIX,CORWIN;
INTEGER ARRAY FEAT[1:3,1:4,1:200];
WINDOW←12;
MAKPIX(200,200,4); INIWIN(WINDOW);
BEGIN
INTEGER CURPIC,PREPIC;
INTEGER ARRAY PIC[1:2,1:PICSIZ];
INTEGER PROCEDURE HORIZON;
BEGIN
INTEGER ARRAY WINS[-1:VERWIN,1:HORWIN];
INTEGER SUM,I,J,NF;
INTEGER DX1,DX2,DY1,DY2,T,BST,BSTBST,H,SCANX,SCANY;
SUM←DOWIN(PIC[PREPIC,1],WINS[1,1]);
NF←0;
FOR I←2 STEP 1 UNTIL VERWIN-3 DO
FOR J←3 STEP 1 UNTIL HORWIN-2 DO
IF (WINS[I,J] LAND 1)=0 ∧ WINS[I,J]≥SUM THEN
BEGIN
FEAT[1,PREPIC,NF←NF+1]←(J-1)*WINDOW+1;
FEAT[2,PREPIC,NF]←(I-1)*WINDOW+1;
FEAT[3,PREPIC,NF]←WINS[I,J];
END;
WINDOW←CORWIN;
INIWIN(WINDOW);
TX←WINDOW/PICWID;
TY←WINDOW/PICHIG;
BSTBST←'377777000000;
DO
BEGIN
H←1 BST←0;
FOR I←1 STEP 1 UNTIL NF%2 DO
IF FEAT[3,PREPIC,I]>BST ∧ FEAT[3,PREPIC,I]<BSTBST ∧
FEAT[1,PREPIC,I]≥PICWID/3 ∧ FEAT[1,PREPIC,I]≤2*PICWID/3 THEN
BEGIN H←I; BST←FEAT[3,PREPIC,I]; END;
BSTBST←BST;
SCANY←10; SCANX←60;
DX1←1 MAX (FEAT[1,PREPIC,H]-SCANX);
DY1←1 MAX (FEAT[2,PREPIC,H]-SCANY);
DX2←PICWID MIN (FEAT[1,PREPIC,H]+SCANX+WINDOW-1);
DY2←PICHIG MIN (FEAT[2,PREPIC,H]+SCANY+WINDOW-1);
T←BSTCOR(PIC[PREPIC,1],FEAT[1,PREPIC,H],FEAT[2,PREPIC,H],
FEAT[1,PREPIC,H]+WINDOW-1,FEAT[2,PREPIC,H]+WINDOW-1,
PIC[CURPIC,1],DX1,DY1,DX2,DY2);
FEAT[1,CURPIC,H]←DX1; FEAT[2,CURPIC,H]←DY1; FEAT[3,CURPIC,H]←T;
END UNTIL T≤8 ∨ BST=0;
RETURN(BST);
END;
COMMENT MAIN PROGRAM;
CURPIC←1; PREPIC←2;
PICTURE(CURPIC);
WHILE TRUE DO
BEGIN
INTEGER N,HORFEAT; BOOLEAN LOST;
N←0;
DO comment acquire a horizon feature;
BEGIN
FORWARD(5);
PICTURE(PREPIC); CURPIC↔PREPIC;
END UNTIL (HORFEAT←HORIZON)≠0 ∨ (N←N+1)>5;
STEER((FEAT[1,CURPIC,HORFEAT]-FEAT[1,PREPIC,HORFEAT])/10);
DO comment now track it as long as possible;
BEGIN
FORWARD(5);
PICTURE(PREPIC); CURPIC↔PREPIC;
LOST←LOCFEAT(HORFEAT,PREPIC,CURPIC);
IF ¬LOST THEN STEER((FEAT[1,CURPIC,HORFEAT]-FEAT[1,3-CURPIC,HORFEAT])/10);
END UNTIL LOST;
END;
END;
END;